Inhalt: Die wichtigsten nderungen in den einzelnen Releases.
        Sollte bei jedem neuen Release gelesen werden, da hier die aktuellsten
        Informationen stehen.


M2LIB-4: 21-Sep-96
  o POSIX/"OSCALLS.Pexec()": Der BOOLEAN-Erfolgswert wurde falsch berechnet;
    ist mir ein Rtsel, warum das je funktioniert hat...Jetzt geben jedenfalls
    "execv()", "execve()", "spawnv()" und "spawnve()" eine korrekte
    Fehlermeldung zurck, wenn z.B. das Programm nicht gefunden werden konnte.
  o POSIX/"ANSIC.remove()": Alias fr "unlink()".
  o POSIX/'DosSystem': Mit SPCM2 gab's Syntaxfehler.
  o POSIX/'tim': Neues Ende der Sommerzeit in Deutschland bercksichtigt.
  o POSIX/"file.pipe()": Die Handles werden nicht mehr in einem RECORD
    bergeben, sondern in einem Feld mit zwei Elementen; das ist mehr
    POSIX-like.
  o POSIX/'proc': Die explizite Konvertierung von eACCDN nach EPERM bei
    einigen Prozeduren war unntig, da die Konstanten denselben Wert haben.
  o POSIX/'args': An vernderte "ShelRead()"-Deklaration von "crystal" > 1.56
    angepat.
  o POSIX: Modulumbenennungen: 'cstr' -> 'str', 'clib' -> 'lib'.
  o POSIX/'LCnl': Ein niederlndisches Locale von Pieter van Middelen; noch
    nicht ganz vollstndig.
  o POSIX/'loc': Mit den Makros __INCLUDE_??_LOCALE__ im Implementationsmodul
    kann jetzt eingestellt werden, welche Locales bercksichtigt werden sollen.
    Ein deaktiviertes Locale kann zur Laufzeit nicht verwendet werden,
    stattdessen wird dann ein Fehler gemeldet oder das POSIX-Locale verwendet,
    es lt sich so aber die Gre gelinkter Programme senken (z.B. bei
    'showdate.ttp' sichtbar).
  o COMPILER/TDIM2/RS_PD/*: Aktualisiert. Die Modulterminierung befindet
    sich jetzt ebenfalls in diesem Verzeichnis.
  o ISO/'LowLong/Real': Bei der TDI-Version von "round()" war im
    Assemblerquelltext ein falscher Offset fr einen Parameter angegeben,
    im Code stimmte er aber.
  o POSIX/'fcrypt': Neues Modul mit einer Implementierung von "crypt()"
    zur Passwort-Verschlsselung, die mit der von MiNT-OS bzw. KGMD
    kompatibel ist. Die Funktion wurde mit GNU-C 2.5.8 bersetzt und fr die
    Benutzung aus Modula-2 heraus modifiziert. Der C-Quelltext entstammt
    der DES-Bibliothek von Eric Young, deren Quelltext hier erhltlich ist:

      ftp://ftp.psy.uq.oz.au/pub/Crypto/DES/libdes-3.23.tar.gz

    Eine ATARI-Portierung (von mir) ist ebenfalls erhltlich:

      ftp://ftp.cs.tu-berlin.de/pub/atari/Utils/Misc/des323b.zoo

  o INCLUDE: POSIX_ID.M2H in C_ID.M2H umbenannt, da nicht nur die Namen
    von POSIX-Objekten, sondern alle Namen mit Unterstrichen bercksichtigt
    werden.
  o POSIX/'DosSystem': Wieder ohne Fehler bersetzbar, wenn __MAGICLIB_TERM__
    aktiviert ist.
    (Gemeldet von Ulrich Kaiser.)
  o POSIX/*: Einheitlich: Namen von Aufzhlungstypen Singular, zugehrige
    Mengentypen Plural.
  o POSIX/'Socket': Neues Modul mit den elementaren Socket-Operationen
    fr das MiNT-Net von Kay Rmer. Die Schnittstelle entspricht den
    Headerdateien: sys/{socket.h,un.h}. Wenn Pfade angegeben werden mssen,
    so sind sie in DOS-Notation anzugeben, da die Umwandlung von der
    UNIX-Notation zu viel Zeit kostet; dies kann bei Bedarf einmal zu
    Beginn von den "hheren" Funktionen vorgenommen werden.
  o POSIX/'tim': Neue Funktionen "local2UTC()", "UTC2local()"  zur
    Konvertierung zwischen lokaler und UTC-Zeit wenn time_t-Ausdrcke
    fr/von ``auerhalb'' bearbeitet werden sollen.
  o POSIX/"sig.abort()": Neue Funktion.
  o BIN/GULAM: Beim Prprozessieren wird fr das temporre Verzeichnis jetzt
    TMPDIR statt TEMP ausgewertet.
  o POSIX/: 'TimevalRec/Ptr' von 'sig' nach 'types' transportiert.
  o POSIX/"args.ARGVused()": Liefert jetzt Aufzhlungstyp, mit dem sich
    feststellen lt, ob auch die Erweiterung fr leere Argumente benutzt
    wurde. 'showcmd' bercksichtigt die neuen Werte.
  o POSIX/'mem': Bei aktiviertem _DEBUG werden jetzt noch intensivere
    berprfungen vorgenommen, so da diese Option nicht nur zum Test der
    Speicherverwaltung ntzlich ist, sondern auch zum Test der sie
    benutzenden Programme (Hallo, Ulrich...)
  o POSIX/'sys': Neue Funktionen: "get/settimeofday()", "ftime()"
    Da jetzt sowieso 'tim' importiert werden mu, die nderung an "uname()"
    in M2LIB-3 rckgngig gemacht, so da das Releasedatum wieder im lokalen
    Datumsformat ausgegeben wird.
  o ISO/'Low*': Wenn bei HM2 die Option $f+ aktiviert ist, geben die
    Funktionen jetzt ein LONG/SHORTREAL-Ergebnis in FP0 zurck.
  o POSIX/'DosSystem': "CPU()", "FPU()" umbenannt in "GetCPU()", "GetFPU()".
  o POSIX/'jump': Jetzt werden einheitlich bei allen Compilern die Register
    D2-D7/A2-A7 gerettet und, falls eine ``richtige'' FPU existiert (kein 040),
    auch die Register FP1-FP7.
  o POSIX/'pOUT': Bei der Zahlenausgabe wird jetzt nicht mehr die
    systemspezifische Routine (WriteInt() etc.) benutzt, sondern nur noch
    WriteString mit vorheriger Umwandlung durch "[u]ltoa()", da manche
    Systeme Schwierigkeiten mit MIN(LONGINT) haben.
  o ISO/'tlmath','TLongSupport': Auch Tests der Randwerte +/-2^31, 2^32 bei
    der Konvertierung zwischen ganzen und reellen Zahlen.
  o ISO/'LongMath','LongSupport': Kein berlauf mehr bei "round()", "entier()"
    und "int()" und MIN(LONGINT) als Ergebnis bei einigen Systemen.
  o POSIX/'sys': 'MAXHOSTNAMELEN' auf 16 reduziert, wegen Kompatibilitt
    zu mit MiNT-Lib gelinkten Programmen.
  o POSIX: 'pDOSOUT' in 'DosIO' umbenannt.
  o Untersttzung einer "richtigen" FPU 68881/2 oder eines entsprechenden
    Line-F-Emulators fr alle Systeme auer MM2 eingebaut.
    Zur Laufzeit wird getestet, ob eine solche FPU vorhanden ist, und dann
    automatisch eine passende Berechnung ausgefhrt. Da bei MM2
    unterschiedliche Real-Formate fr Softwareemulation und FPU existieren,
    die nicht zur Laufzeit gewechselt werden knnen, fllt die Untersttzung
    fr MM2 flach.
    Im einzelnen:
    - Neue Datei FPU.TXT mit weiteren Erluterungen.
    - 'LowReal/Long': Einige Prozeduren haben eine FPU-Alternative.
      Mit "setMode()" und "currentMode()" knnen die wesentlichen Bits
      des FPU-Registers FPCR gesetzt bzw. abgefragt werden (Rundungsmodus,
      Rundungsgenauigkeit, Exception-(De)Aktivierung).
    - Neue Funktionen in 'DosSystem': "ResetIEEEfpState()","GetIEEEfpState()".
      Wenn die FPU-Exceptions deaktiviert sind (Default), kann mit diesen
      Funktionen das "Accrued Exception Byte" des FPU-Registers FPSR
      abgefragt bzw. gelscht  werden, um auf Fehler zu reagieren.
    - In folgenden mathematischen Modulen sind fr die meisten Funktionen
      FPU-Berechnungsalternativen vorhanden: 'RealSupport', 'LongSupport',
      'RealMath', 'LongMath', 'RealXMath', 'LongXMath'.
    - Beim Testprogramm 'TLowLong' knnen bei Test 5 einige Fehler auftreten.
      Ich konnte die Ursache nicht finden, ist aber nicht so schlimm, da die
      grundstzliche Funktion der dort getesteten Funktionen "intpart()"
      und "fractpart()" gewhrleistet ist. Wahrscheinlich mten bei diesem
      Test nur irgendwelche Eigenschaften der FPU gesondert bercksichtigt
      werden.

  o ISO/'StringsX': Neues Modul mit weiteren Stringfunktionen in der Art von
    'ISOStrings'.
  o Das Modul 'pSTRING' aus dem POSIX-Verzeichnis ist weggefallen.
    Stattdessen werden jetzt berall die Module 'ISOStrings' und 'StringsX'
    verwendet.
    Die in 'pSTRING' enthaltenen Spezialfunktionen fr Einzelzeichen
    ("*CHR()") mssen durch die ``normalen'' Stringfunktionen ersetzt werden,
    wobei die Einzelzeichen vorher durch Zuweisung an eine Variable vom
    Typ 'String1' in einen String umgewandelt werden.
    Da die Module nun auch von den POSIX-Modulen verwendet werden, muten sie
    in's Verzeichnis POSIX/SUPPORT verfrachtet werden.
  o ISO/'SysClock': Durch Verwendung von "s/gettimeofday()" sind jetzt auch
    Sekundenbruchteile verfgbar.
  o TEST/POSIX/'tsys': Aufruf von "setlocale()", damit auch wirklich das
    lokale Datumsformat bei "uname()" angezeigt wird.
  o POSIX/'term': Neue Funktion "ioctl()" samt zugehriger Konstanten und
    Typen.
  o Die Reexportmodule 'iX', 'POSIX1', 'ANSIC' und die Makrodateien C_ID.M2H,
    M2_ID.M2H aktualisiert.
  o Aus Platzgrnden muten die meisten fertig bersetzten Test- und
    Beispielprogramme verschwinden, sie knnen jedoch leicht selbst wieder
    erzeugt werden.


  Mangels Interesse Eurerseits (und auch meinerseits) ist dies
  voraussichtlich das letzte Release.


M2LIB-3: 11-Jan-96
  o POSIX/"DosSystem.ShellInstalled()": Kennt jetzt auch den Desktop "Thing".
    (In neueren Versionen installiert Thing sich allerdings nicht mehr in
    _shell_p.)
  o ISO/'*ComplexMath': Durch genderte Berechnung kann es jetzt nicht
    mehr (bzw. seltener) zu einem vorzeitigen berlauf bei den Funktionen
    "abs()" und "cdiv()" kommen.
  o POSIX/'cstr','BSD': "stricmp()" und "strnicmp()" in "strcasecmp()" und
    "strncasecmp()" umbenannt. Die Funktionen werden auch aus 'BSD'
    reexportiert, wobei zustzlich ein Alias auf die alten Funktionsnamen zur
    Verfgung gestellt wird.
  o POSIX/"pCMDLINE.ARGVused()": Neue Funktion, wird auch von ShowCMD benutzt.
  o ISO/MATH,SUPPORT: Die Module '[Long]HyperMath' und deren Basismodule
    wurden umbenannt in 'RealXMath', 'LongXMath', 'RealXBase' und 'LongXBase'.
    Sie stellen praktisch eine Erweiterung der ISO-Module dar und haben
    deswegen auch keine separate Exception mehr. Es wurden mehrere neue
    Funktionen zustzlich zu den Hyperbelfunktionen hinzugefgt: "cbrt()",
    "hypot()", "exp10()", "powI()", "log10()", "log()", "arctan2()",
    "rectToPol()", "polToRect()", "degToRad()", "radToDeg()", "secToRad()",
    "radToSec()".
    Die inversen Hyperbelfunktionen wurden in "arcsinh()", "arccosh()",
    "arctanh()" umbenannt, da diese Namen anscheinend gngiger sind.
    "Real/LongMath.power()" ist jetzt flexibler.
    Die Schnittstelle der Basismodule hat sich etwas gendert.
  o ISO: 'XStrings' in 'ISOStrings' umbenannt.
  o POSIX/"DosSupport.DosToUnix()": Die Laufwerke v: und q: werden nicht
    mehr speziell behandelt als Synonym fr u:\dev und u:\pipe.
  o POSIX: 'BSD' in 'iX' umbenannt.
  o BIN: Shell-Scripts der Korn-Shell mssen auch UNIX-Zeilenenden enthalten,
    wenn im Binrmodus (UNIXMODE 'b') gearbeitet wird, sonst gibt's
    Syntaxfehler wie bei der Bash.
  o INCLUDE/M2_ID.M2H,POSIX_ID.M2H: Die Umsetzung zwischen struct_group und
    GroupRec war fehlerhaft.
  o COMPILER/LPRM2: Im genderten GEMX wurde die BssLen auf Null
    zurckgesetzt, nachdem sie vom genderten Linker bzw FIXPRG auf die
    Gre von statischem Heap und Stack gesetzt wurde (wegen ACCs). Das
    Zurcksetzen war wegen 'Heap' notwendig. Um evtl. Problemen mit MiNT
    aus dem Weg zu gehen, das den Wert von BssLen vielleicht noch bentigt,
    wird BssLen in GEMX nicht mehr angetastet. Dafr mute aber nun auch
    Heap gendert werden. D.h. auch, da die beiden Module aufeinander
    angewiesen sind: Wer das neue GEMX benutzt, mu auch das neue Heap
    benutzen und umgekehrt. Das sollte aber kein Problem sein, da gegenber
    den Originalmodulen keine Funktionalitt verlorengeht.
  o ISO/SUPPORT: Neue Module 'CXMath', 'LCXMath' mit weiteren mathematischen
    Funktionen fr komplexe Zahlen.
  o ISO/MATH,SUPPORT: Die mathematischen Module, die auch fr den Benutzer
    von Interesse sind, von SUPPORT nach MATH verschoben, obwohl sie nicht
    zur ISO gehren; da in den Def.modulen erwhnt ist, was zur ISO
    gehrt und was nicht, sollte es keine Verwirrung geben.
  o INCLUDE/'PORTAB.M2H': Die Version 4.3c des Megamax-Compilers hat einen
    Fehler bei den strukturierten Konstanten, so da sich die LC*-Module
    und 'DosSupport' nicht bersetzen lieen (-> interner Fehler). Wer diese
    Version benutzt, mu in PORTAB.M2H das neue Makro MM2_43c definieren.
    (Gemeldet von Olaf Orth.)
  o ISO/'*ComplexMath': Keine Syntaxfehler beim bersetzen mehr, wenn
    __NO_EXCEPTIONS__ definiert wurde.
  o ISO/'LongBase': "ln()", "arctan()", "sin()", "cos()" und "exp()" durch
    genderte Berechnung etwas beschleunigt.
  o ISO/'RealBase': "arctan()", "sin()", "cos()" und "tan()" durch
    genderte Berechnung etwas beschleunigt.
  o COMPILER/LPRM2: Bei der LONGREAL-Divisionsroutine des Patch-Programms
    fr das Laufzeitsystem war ein Fehler, der sich all die Jahre versteckt
    hat...Dieser ist jetzt korrigiert und das Patch-Programm lt sich jetzt
    auch mit M2LIB bersetzen. Bereits gepatchte SYSTEM.OBM und M2SHELL.OBM
    knnen erneut gepatcht werden, da die Abfrage auf die Originalmodule
    auskommentiert ist.
  o *: Kosmetik: Alle AND, NOT und <> durch &, ~, # ersetzt. Erleichtert
    evtl. bertragung nach Oberon.
  o ISO/'FConvBase': Bei positivem Exponenten wird ein '+' als Vorzeichen
    geschrieben.
    Bei negativen Zahlen in Fixpunktdarstellung, die zu Null abgerundet
    wurden, wird trotzdem ein Vorzeichen geschrieben.
    "split()" etwas beschleunigt.
    "mantToStr()" um Faktor 10 beschleunigt!
    "roundMant()" entfallen, da jetzt in "mantToStr()" integriert.
    Alle Prozeduren, die evtl. runden, haben jetzt einen zustzlichen
    Parameter, der angibt, ob es sich bei dem ursprnglichen Wert um einen
    REAL- oder LONGREAL-Wert handelte, damit auch wirklich nur auf die
    vorhandenen Stellen gerundet wird.
  o ISO/'RealStr','RealConv','[S]RealIO': Es werden jetzt auch +/-Inf und NaN
    dargestellt (vorher nur bei den *Long*-Modulen).
  o POSIX/'loc','LC*': Locales in LCde, LCfr und LCen umbenannt. Entsprechend
    mssen die Environmentvariablen jetzt mit de, fr oder en belegt werden.
    Das ist kompatibel zu GNU-gettext.
  o POSIX/"iX.setpgrp()": Alias fr "setpgid()".
  o POSIX/'proc': Neue Funktionen: "nice()", "renice()".
  o ISO/MATH,SUPPORT: Die Module 'Long[X]Base' und 'Real[X]Base' sind
    entfallen, da die Berechnungen direkt in den Mathemodulen vorgenommen
    werden. Damit entfllt die Mglichkeit, zur Laufzeit die Routinen
    auszutauschen, aber das ist kein groer Verlust. Eine evtl. FPU-Anpassung
    wird dann in die Routinen direkt integriert durch eine Laufzeitabfrage
    auf den FPU-Typ. Dadurch geht keine Zeit verloren, aber es werden vier
    Module eingespart.
  o POSIX/"pCMDLINE.putenv()": Neue Funktion, auch aus 'iX' reexportiert.
  o POSIX/'MEMBLK': Neue Funktionen "bcopy()", "bzero()", auch aus 'iX'
    reexportiert. "bcmp()" als Alias fr "memcmp()" in 'iX'.
  o INCLUDE/OSCALLS.M2H: Kleinere Korrekturen.
  o POSIX/'OSCALLS': BIOS-, GEMDOS- und MiNT-Aufrufe jetzt vollstndig.
  o POSIX/'DosSupport': Neue Variable DRVU.
  o POSIX/"DosSystem.GetPageSize()": Neue Funktion.
  o POSIX/"sys.getpagesize()": Neue Funktion, auch aus 'iX' reexportiert.
    'tsys' gibt deren Wert aus.
  o POSIX: Modulumbenennungen: 'MEMBLK' -> 'blk', 'pCMDLINE' -> 'args',
    'e' -> 'er'.
  o POSIX/'DosSystem':
    - Eine Reihe von (internen) Variablen und Funktionen von 'DosSupport'
      nach 'DosSystem' verschoben.
    - Alles, was mit Modulterminierung zu tun hat, von 'clib' nach
      'DosSystem' verschoben, wodurch die meisten systemspezifischen Dinge
      in 'DosSystem' gelandet sind (sieht man auch an der Menge von
      Prprozessoranweisungen...).
    - Durch ein neues Makro am Anfang des Moduls kann beim Prprozessieren
      eingestellt werden, ob bei den Funktionen "exit()" und "Exit()" die
      Funktion "M_Appl.ApplTerm()" der MagicLib 4.x ausgefhrt werden soll,
      damit eine korrekte Abmeldung des Programms stattfindet. Damit sollte
      es keine Probleme (mehr) geben, M2LIB zusammen mit der MagicLib
      einzusetzen. Bitte auch die neue Datei MAGICLIB.TXT lesen!
    - In der Modulinitialisierung und bei einigen Funktionen wird nicht mehr
      auf Systemvariablen zugegriffen, wenn der Cookie SVAR gesetzt ist
      (wegen MacMiNT, siehe ST-C 12/95), da auer _p_cookies keine anderen
      Systemvariablen existieren. Das bedeutet aber auch, da einige
      Funktionen wie "SysClock()" oder "GetOsHeader()" nur noch Dummies sind,
      und da andere Funktionen wie "*SysMem()" nicht benutzt werden drfen.
      Weitere Bibliotheksfunktionen, die z.B. "SysClock()" verwenden, drften
      bei Existenz von SVAR auch nur noch eingeschrnkt oder gar nicht mehr
      funktionieren. Aber wer MacMiNT unbedingt benutzen will...
    - Bevor in der Modulinitialisierung die MagiC-Version erfragt wird, wird
      getestet, ob auch wirklich alle dafr benutzten Pointer ungleich NULL
      sind (fr AUTO-Ordner-Programme).
    - Neue Funktion "AvailableDrives()".
  o POSIX/'mem': Neues Modul fr dynamische Speicherverwaltung mit den in
    ``C'' benutzten Funktionen.
    Die Speicherverwaltung gibt nach Mglichkeit auch wieder Speicher ans
    Betriebssystem zurck und ist auerdem ``Thread-fest''! Zu diesem Thema
    bitte auch die Erluerungen im Quelltext und den Abschnitt in THREADS.TXT
    lesen.
  o ISO/'Storage': Implementiert und in 'ISOStorage' umbenannt.
  o *: berall 'pSTORAGE' durch 'mem' bzw. 'ISOStorage' ersetzt.
  o POSIX: Die Funktion Dpathconf() verfolgt keine symbolischen Links. Wenn
    also ein symbolischer Link auf ein Verzeichnis verweist, ermittelt
    Dpathconf() die Daten fr das Verzeichnis, in dem sich der Link
    befindet, und nicht fr das Verzeichnis, auf das der Link verweist
    (siehe ST-C 11&12/95). Bei den Funktionen "dir.opendir()",
    "sys.pathconf()" und "DosSupport.IsDosDir()" wird deshalb intern ein
    "\." an den Pfadnamen angehngt, um den Link fr Dpathconf()
    aufzulsen, wenn Dateisystemeigenschaften ermittelt werden. Nur wenn
    das nicht funktioniert (z.B. weil das Dateisystem kein "." kennt oder es
    gar kein Verzeichnis ist), wird der Originalpfad verwendet.
  o POSIX/'DosSupport': Die Variable ROOTDIR wird nur noch dann gesetzt, wenn
    das in UNIXMODE angegebene Laufwerk auch wirklich existiert
    (siehe ST-C 12/95).
  o BIN/CPP: CPP.TEX weggelassen. DVI-Previewer gibt es genug.
  o POSIX/"dir.chown()": Problem: Nach POSIX sollen symbolische Links
    aufgelst werden, Fchown() tut dies aber nicht. Das lt sich auch nicht
    durch Anhngen von "\." umgehen, da es sich nicht um ein Verzeichnis
    handeln mu.
  o POSIX/"mem.strdup()": Neue Funktion, auch aus 'ANSIC' reexportiert.
  o POSIX/'pDOSOUT': Bei der Zahlenausgabe kann jetzt eine Feldbreite
    angegeben werden.
  o TEST: Alle Testmodule, die keine reellen Zahlen ausgeben, verwenden nur
    noch 'pDOSOUT' fr die Ausgabe.
  o POSIX/'LCen': Die ASCII-Zeichen > 127 wurden bei MM2 und HM2 nicht mehr
    als graphisch und darstellbar gekennzeichnet.
  o POSIX/'args': Keine interne Beschrnkung von Environment und Argumenten
    auf 64kB mehr.
    Falls der Aufrufer das ARGV-Verfahren verwendet hat, wird jetzt nicht
    mehr die Basepage-Kommandozeile gesetzt; das ist Aufgabe des Aufrufers.
  o POSIX/'proc': Bei den "spawn*()"- und "exec*()"-Funktionen gibt es
    ebenfalls keine Beschrnkung von Environment und Argumenten auf 64kB mehr.
  o POSIX/'DosSystem': Auch ohne Vorhandensein von MiNT wird jetzt versucht,
    im Modulrumpf in die MiNT-Domain zu schalten (-> MagiC4).
  o POSIX/"dir.xreaddir()": Unter TOS wurde das 'stDev'-Feld nicht richtig
    gesetzt.
  o POSIX/"DosSystem.MagiCVersion()": Liefert jetzt einen INTEGER-Wert,
    damit MagiC auch erkannt wird, wenn es ein Autoordnerprogramm ist.
  o POSIX/'dir': Magic3/4 scheint einen Fehler (oder Feature?) bei 'Fxattr()'
    zu haben, denn es wird immer ein gesetztes x-Bit angezeigt. Das sieht man
    z.B. bei einem GNU ls, das mit MiNTLib pl46 gelinkt wurde (z.B. aus der
    KGMD). Bei "*stat()" und "xreaddir()" wird jetzt zumindest versucht den
    Zustand des x-Bits zu ermitteln, wenn es sich bei der Datei nicht um einen
    symbolischen Link handelt. Das kostet allerdings etwas Zeit, so da unter
    MagiC z.B. "xreaddir()" nicht wesentlich schneller als "readdir()" +
    "stat()" ist, was man an 'ListDir' sehen kann, das unter Magic langsamer
    als unter TOS ist.
  o POSIX/'pSTORAGE': Durch ein neues Makro kann eingestellt werden, ob
    'mem' oder das vom M2-System vorgesehene Systemmodul fr
    Speicheranforderungen benutzt werden sollen. In M2LIB wird allerdings
    'pSTORAGE' nicht mehr verwendet.
  o COMPILER/TDIM2/RS_PD/*: Aktualisiert.
  o TEST/'tadt': Bei MM2 keine Fehlermeldung wegen Registervariable mehr.
  o MISC/'DLists','RBTrees': Das Makro __TEST__ in _DEBUG umbenannt und
    defaultmig ausgeschaltet.
  o ISO/'*File','StdChanBase': Beim ffnen eines Kanals wirklich alle
    internen Variablen initialisieren. Keine Ahnung, ob das irgendwas
    ndert, aber schaden kann's wohl auch nicht...
  o DOC/'THREADS.TXT': Neue Datei mit den aus 'POSIX.TXT' ausgelagerten
    Erluterungen zu Programmterminierung, Speicherverwaltung usw.
  o POSIX/"DosSystem.MetaDOS()": Neue Funktion. Wird auch in 'TDosSystem'
    bercksichtigt.
  o POSIX/'DosSupport': Aufgespalten in 'DosDir', 'DosFile', 'DosText' und
    'DosTime' mit voneinander unabhngigen Funktionen.
  o POSIX/"DosFile.Disconnect()": Geht jetzt auch fr Handle -1.
    "proc.setsid()" benutzt jetzt diese Funktion.
  o POSIX/"sys.uname()": Das Release-Datum wird jetzt konstant im
    amerikanischen Datumsformat ausgegeben; dafr wird 'tim' nicht mehr
    importiert.


M2LIB-2: 17-Jun-95
  o CPP/CPP.DVI mit Index.
  o DOC/ENGLISH: Ulrich Kaiser has translated part of the documentation into
    English.
  o POSIX/"cstr.Token()": Die Parameter haben sich gendert.
  o POSIX/'DosSupport': Neue Funktionen: "FileExists()", "PathToken()",
    "SplitPath()", "TstENOTDIR()"
  o POSIX/'proc': "spawnvp()", "execvp()": Nur wenn in TOSEXT keine ``leere''
    Extension angegeben ist und die Datei selbst keine Extension hat, wird
    nach den angegebenen Extensionen noch mal die Datei ohne Extension
    automatisch getestet.
    Es werden nur noch regulre Dateien bercksichtigt.
    In der Environmentvariable PATH knnen die Pfade nun auch durch den
    UNIX-Pfadtrenner ':' getrennt sein.
    Wenn der Pfad lediglich aus einer Laufwerksangabe besteht, wird jetzt
    das aktuelle Verzeichnis dieses Laufwerks benutzt.
    Es konnte unter Umstnden einen Absturz geben, weil ein ``C''-String
    zu spt mit einem Nullbyte abgeschlossen wurde.
  o MISC: Neue Module, abstrakte Datentypen (ADT): 'ADTBase', 'DLists',
    'Stacks', 'Queues', 'RBTrees'.
  o MISC/'pTIMER': Neues Modul fr Zeitmessungen.
  o MISC/'tadt': Tests fr die ADTs.
  o POSIX/"dir.mkdir()": Die Dateiattributmaske wurde nicht bercksichtigt.
  o POSIX/'file': Typ 'modeT' nach 'types' transportiert.
  o POSIX/"dir.readlink()": Wenn ein symbolischer Link lnger als der zur
    Verfgung stehende Platz im Puffer war, konnte es unter Umstnden zum
    Absturz kommen, weil dann von einigen Dateisystemen (z.B. pipefs und
    unifs) der Pfad nicht mit einem Nullbyte abgeschlossen wird.
  o POSIX: Bei "dir.readdir()" und "proc.getcwd()" werden die Datei- bzw.
    Pfadnamen jetzt genau dann in Kleinbuchstaben konvertiert, wenn der
    'Dpathconf(DP_CASE)'-Aufruf nicht untersttzt wird oder das Dateisystem
    die Dateinamen von selbst immer in Grobuchstaben konvertiert
    (DP_CASECONV) (damit auch unter Magic3 bei TOS-Dateisystem
    Kleinbuchstaben).
  o POSIX: Na sowas, Unter TOS findet 'Fattrib' keine Verzeichnisse! Deshalb
    wird nun an den Stellen, wo auch Verzeichnisse auftreten knnen,
    stattdessen 'Fsfirst' verwendet, wenn kein 'Fxattr' existiert.
  o POSIX/'POSIX1': Die Konstanten sIFMT etc. sind nicht POSIX und werden
    deshalb nur aus BSD reexportiert.
  o POSIX/'sig': "kill()" und "raise()" funktionierten nicht, wenn zwar
    der 'Pgetpid'-Aufruf, nicht aber der 'Pkill'-Aufruf existiert; zu
    beobachten bei 'Spawn' unter Magic3: ``File not found'', obwohl
    'showcmd' ausgefhrt wurde, und keine Meldung ber SIGCHLD.
    Auerdem wird bei "kill()" in der Emulation jetzt "Exit()" statt 'Pterm'
    verwendet.
  o POSIX/'proc': Folgendes Problem gibt es, wenn zwar der 'Pgetpid'-Aufruf
    existiert, nicht aber 'Pvfork' und die erweiterten 'Pexec'-Modi:
    "tfork()" und "vfork()" starten die Unterprozesse mit normalem 'Pexec'
    nach Erzeugen einer Basepage als Unterprogramme und mssen deshalb aus
    der Basepage des Unterprogramms eine Prozekennung berechnen; diese
    ist aber unterschiedlich zur ``echten'' Prozekennung, die nur im
    Unterproze mit 'Pgetpid' abgefragt werden kann. Zu beobachten
    bei 'ForkExec' unter Magic3: Unterschiedliche CHILD-Prozekennungen.
  o POSIX/"DosSystem.Machine()": Neue Typen: ST-Book, STE mit IDE, Sparrow.
  o POSIX: "sys.uname()" und 'TDosSystem' bercksichtigen ebenfalls die
    neuen 'Machine'-Typen.
  o POSIX: nderungen gem MiNTLib:
    - "proc.setsid()": Prozegruppe des Terminals wird nicht mehr gelscht.
    - "dir.chmod()", "file.utime()": Fehler bei Verzeichnissen auf
      TOS-Dateisystemen werden ignoriert.
    - Die Fehlermeldungen einiger Funktionen wurden besser an das angepat,
      was die entsprechenden *IX-Funktionen liefern. Das betrifft vor allem
      die Meldungen ENOTDIR und ENOENT bei allen Funktionen mit einer
      Pfadangabe.
    - "dir.rename()" wie in der MiNTLib.
  o POSIX/'file': "open()" aufgespalten in "open()" mit zwei Parametern und
    "open3()", das dem alten "open()" entspricht.
  o POSIX/'ctype','LC*': Neue Funktionen "[C]isodigit()" und dazu ntige
    nderungen bei den Locales.
  o POSIX/'file': Die Funktion "umask()" nach 'proc' verschoben und die
    Funktionen "chmod()", "chown()", "utime()", "*stat()", "access()",
    "sIF*()", "major()", "minor()" und "makedev()" nach 'dir' verschoben.
  o ISO/"StreamFile.Open()": Falls die Flags 'write' und 'old' gesetzt
    waren, mute die angegebene Datei bereits existieren, jetzt wird sie
    gegebenenfalls neu erzeigt.
  o POSIX/'OSCALLS': Bser Fehler: Bei 32-Bit-INTEGERn wurde das Dateihandle
    bei den Funktionen 'Fopen', 'Fcreate' und 'Fdup' nicht aus den unteren
    16 Bits, sondern aus dem gesamten 32-Bit-Ergebnis gebildet, was dazu
    fhrte, da negative Handles als (zu) groe positive Handles geliefert
    wurden (-1 -> 65535).
  o ISO/*: Die IO-Funktionen beschleunigt, insbesondere das Lesen von
    Einzelzeichen mit "Look()" + "SkipLook()".
    Falls bei "[Skip]Look()" ein Zeilenende oder Dateiende auftritt, wird
    das zurckgelieferte Zeichen auf Null gesetzt.
  o ISO/'StdChans': Bei Programmende wird automatisch ein "Flush(StdOutChan())"
    ausgefhrt.
  o COMPILER/LPRM2/PATCHES: Leicht korrigiertes 'Heap'-Modul als Ersatz
    fr das fehlerhafte Original-Heap in STANDALO.NE.
  o ISO: Wegen des gegenseitigen Imports von 'IOLink' und IOChan' konnte
    der Aufruf von "AllocateDeviceId()" im Rumpf von 'IOChan' zu einem
    undefinierten Wert fhren; das sollte zwar nichts ausgemacht haben,
    aber jetzt tritt's eben nicht mehr auf.
  o POSIX/'pCMDLINE': Wenn mit TDI ein ACC programmiert werden soll, darf
    die ber das Makro USE_AES_FOR_ARGV0 aktivierbare Ermittlung des
    Programmnamens nicht aktiviert sein; siehe auch COMPILER.TXT.
  o POSIX/*,MISC/*: Kosmetik: Die Kommentare in den Definitionsmodulen haben
    nur noch einfache Kommentarklammern, so wie die ISO-Module. Das
    erleichtert nderungen und bringt ber 100kB Platzersparnis.
  o POSIX/"clib.sprintf()": Neue Funktion fr die C-kompatible
    Stringumwandlung und Formatierung.
  o POSIX/'e','LC*': Die MagiC-Fehlermeldungen -68, -69, -70 bercksichtigt.
  o POSIX/"ctype.todigit()" und darauf aufbauende Funktionen liefern jetzt
    bei Ziffern ab 10 Kleinbuchstaben statt Grobuchstaben.
  o ISO/'StreamFile','StdChanBase': Terminals werden bei der Ausgabe jetzt
    zeilenweise gepuffert, d.h. der Puffer wird erst bei einem Zeilenende
    geschrieben. Das erhht die Ausgabegeschwindigkeit sprbar und ist i.allg.
    auch schneller als die Ausgabe ber 'InOut'.
  o ISO,POSIX: Die Konvertierungen zwischen Zahlen und Strings etwas
    beschleunigt.
  o POSIX/"dir.*stat()": Unter TOS wurden fr das Feld 'st_blocks' meistens
    falsche Werte berechnet.
  o POSIX,UTILS: 'ListDir':
    - Speicher wird jetzt dynamisch angefordert, so da es keine Begrenzung
      bzgl. Dateinamenlnge oder Dateianzahl gibt.
    - Fr jede Datei wird die Gre in Kilobytes angegeben.
    - InOut-Funktionen durch ISO-Funktionen ersetzt.
    - Es werden erst alle Dateidaten ermittelt und dann erfolgt die Ausgabe
      ``am Stck'', dadurch subjektiv hhere Geschwindigkeit.
    - Das Muster wird jetzt mittels Option -p angegeben, so da alle
      Argumente als aufzulistende Verzeichnisse betrachtet werden; das ist
      weniger verwirrend...
    Da das Programm jetzt auch fr sich genommen ntzlich ist, nicht nur als
    Testprogramm, wurde es in das neue Verzeichnis UTILS verschoben.
  o POSIX/'types': NAMEMAX auf 128 und PATHMAX auf 256 erhht, fr das
    statische Anlegen von Dateinamen. Falls mglich, sollte das jedoch
    dynamisch mithilfe von "pathconf()" gemacht werden.
  o UTILS/SCANNER: Enthlt einen kompletten Modula-2-Scanner samt String-
    tabellenverwaltung fr den Einsatz in eigenen Programmen.
    'Idents' ist eine Beispielanwendung, die aus einem Definitionsmodul
    eine Liste der exportierten Bezeichner erzeugt, geordnet nach Konstanten,
    Variablen, Typen und Prozeduren.
    'PrintTokens' gibt einfach nur die lexikalischen Einheiten eines
    Modula-2-Programmtextes zusammen mit deren Anfangsposition aus.
    Der Scanner und 'Idents' demonstrieren auch die Anwendung der ADTs
    'RBTrees' und 'Queues'.
  o POSIX/"file.open*()": Die erweiterten 'Fopen'-Modi werden auch mit MagiC3
    benutzt. Unter TOS werden Dateien ohne Leseberechtigung mit dem
    HIDDEN-Attribut angelegt. Es wird jetzt der Fehler EISDIR geliefert,
    wenn vergeblich versucht wurde, ein Verzeichnis zu ffnen.
  o POSIX/"dir.*stat()": Im 'StatRec' werden auch die TOS-Dateiattribute
    geliefert. Unter TOS haben Verzeichnisse die Lnge Null. Unter TOS
    wird fr die speziellen ``Dateien'' "." und ".." in den meisten
    Fllen jetzt das richtige Datum geliefert; dies scheint zumindest in
    meiner TOS-Version 2.06 ein Bug zu sein. Wenn 'Fxattr' fr die Zeiten
    eine Null liefert (kein Datum verfgbar, z.B. Wurzelverzeichnis), werden
    diese nicht mehr als DOS-Datum angesehen, sondern bleiben Null
    (-> 1.1.1970).
  o POSIX/'dir': Neue Funktion "xreaddir()", die das gleiche wie "readdir()"
    macht und auch genauso aufgerufen wird, zustzlich fhrt sie aber
    noch das quivalent eines "lstat()"-Aufrufs fr die jeweilige Datei
    aus. Dazu hat der 'DirentRec' noch ein zustzliches Feld vom Typ
    'StatRec' erhalten, das nur dann gltig ist, wenn ein weiteres
    zustzliches Flag dies anzeigt. Da dieses Flag vom ``normalen''
    "readdir()" immer gelscht wird, knnen beide Funktionen verwendet
    werden. Die Benutzung von "xreaddir()" ist deutlich schneller als ein
    zustzlicher Aufruf von "lstat()"; wenn mglich, wird der GEMDOS-Aufruf
    'Dxreaddir' verwendet, aber auch unter reinem TOS geht's schneller,
    da ein zustzlicher 'Fsfirst'-Aufruf gespart wird.
  o UTILS/'ListDir': Die neue "xreaddir()"-Funktion wird verwendet, wodurch
    z.T. betrchtliche Geschwindigkeitssteigerungen erreicht werden:
    Das Auflisten eines Verzeichnisses mit ber 300 Dateien dauert bei
    Verwendung von "readdir()" etwa 45 Sekunden (GNU-ls bentigt ungefhr
    dieselbe Zeit), sowohl unter TOS als auch unter MiNT. Mit "xreaddir()"
    werden unter TOS nur etwa 20 Sekunden und unter MiNT sogar nur 16 Sekunden
    bentigt! Die Geschwindigkeitssteigerung macht sich allerdings nur bei
    einer greren Anzahl von Dateien so deutlich bemerkbar.
  o ISO/'ComplexMath','LongComplexMath': Die zustzlichen Standardfunktionen
    fr Compiler ohne ISO-COMPLEX-Funktionen in Kleinbuchstaben.


M2LIB-1: 14-Feb-95
  o Erstes ffentliches Release

  nderungen der POSIX-Module gegenber M2POSIX-17:
  o 'tmterm': Kleines Programm fr den Test der Modulterminierung.
  o 'tvfork', 'tthread': Ebenfalls Test der Modulterminierung eingebaut, um
    Funktion im Zusammenhang mit "tfork()" und "vfork()" zu testen.
  o 'pCMDLINE': Falls kein ARGV existiert, wird versucht, argv[0] ber
    'Fcntl(PLOADINFO)' zu ermitteln.
  o 'DosSystem': Mit einem Makro kann eingestellt werden, ob die Basepage
    ber 'Fcntl(PBASEADDR)' oder _sysbase (falls der Fcntl-Aufruf nicht
    untersttzt wird) ermittelt wird, oder ber ein systemspezifisches Modul.
    Neue Funktionen "ActBasepage()" und "MAINBASEPAGE()".
    Die Funktion "DosPid()" und die Variable 'BASEP' wurden nach 'DosSupport'
    transportiert.
    Systemvariablen als Konstanten.
  o 'DosSupport': Neue Funktionen "ActPid()", "SetMain()" und "IsMain()".
  o "sys.statfs()": Der Typ des Dateisystems wird nicht mehr in 'fFsid',
    sondern in 'fType' mitgeteilt.
  o Modulterminierung: "Exit()" wurde von 'proc' nach 'clib' transportiert.
    - Praktisch alles neu programmiert. Die Anwendung der beteiligten
      Funktionen wird in POSIX.TXT beschrieben, Compiler-spezifische
      Besonderheiten, wie immer, in COMPILER.TXT.
    - Fr LPR mit Load-Time-Linking (in der Shell) gibt es jetzt auch eine
      Modulterminierung; dafr ist eine spezielle Version von 'clib' ntig.
      Nheres dazu in COMPILER.TXT.
    - Modulterminierung fr SPC implementiert (Mit Untersttzung durch
      Bertram Kirsch). Sie sollte sowohl beim Load-Time-Linking als auch bei
      gelinkten Programmen funktionieren.
  o Es wird jetzt eine etwas ltere Version des Prprozessors mitgeliefert,
    die aber dafr ``sharable'' ist (gcc -mbaserel); ebenso wurde 'x2d1'
    neu mit -mbaserel bersetzt. Das beschleunigt das Prprozessieren, wie
    in INSTALL.TXT beschrieben.
  o 'OSCALLS.M2H': Neue Aufrufe von MiNT 1.12h2.
    Makrodefinition fr XCALL2l1w fehlte.
  o 'OSCALLS': "Supexec()" nach 'DosSystem' transportiert, kann jetzt einen
    Funktionswert der aufgerufenen Funktion zurckliefern.
    "Psetreu/gid()" aus MiNT 1.11h2 vorlufig dringelassen, obwohl von
    MiNT 1.12 nicht untersttzt (aber von 1.12h2).
    "Cconin()" neu.
  o 'DosSystem': "Machine()" liefert fr den Wert 0FFFFFFFFH des _MCH-Cookies
    'NoAtari'.
    'Language' kennt zwei Sprachen mehr.
    "FreeEntries()" in "FreeCookieEntries()" umbenannt.
    'Language', 'CPUType' und 'MachineType' haben einen 'Unknown'-Wert.
    Neue Funktionen: "ExecuteSuper()", "CurrentCPUMode()", "SuperOn()",
    "SuperOff()", "CurrentIRLevel()", "SetIRLevel()" und zugehrige Typen.
  o 'proc': "tfork()" und "vfork()" sollten jetzt auch mit MM2 unter TOS
    funktionieren.
    "vfork()" MiNT-Cookie-unabhngig.
  o 'tfile': Kleine Anpassung an MagiC: Beim Test von "dup()" wurden Fehler
    gemeldet, da ich bisher davon ausgegangen bin, da beim Erzeugen einer
    neuen Kennung fr einen Standardkanal eine grere Kennung geliefert
    wird.
  o 'TDosSystem': Bercksichtigt die Neuheiten in 'DosSystem'. Ob ein
    Shell-Aufruf erfolgen soll, wird nur noch gefragt, wenn der Typ der
    Shell eindeutig ist.
  o 'MEMBLK': Einige Funktionen etwas beschleunigt.
    Da aber jetzt mehr zu testen ist, dauern die Tests in 'TLib' lnger,
    also nicht wundern!
  o 'proc': Unter MagiC erkennen die "wait*()"-Prozeduren jetzt ein durch
    ^C abgebrochenes Programm wie unter TOS (-> SIGINT).
  o "sys.uname()": Stellt den Rechnertypnamen ber den Cookie 'MNAM' fest,
    falls vorhanden.
  o 'pDOSOUT': Neues Modul fr die Ausgabe ber GEMDOS. Ist nur fr die
    Testmodule gedacht, da hier manchmal der Import von 'InOut' oder 'Terminal'
    Schwierigkeiten macht (SPCM2).
    Die Testmodule 'tthread', 'tvfork' und 'ForkExec' benutzen jetzt diese
    Ausgaberoutinen.
  o Bei den Systemen LPRM2 und SPCM2 wird das Load-Time-Linking am
    Betriebssystem vorbei erledigt (ohne Pexec), so da jede von einem
    Programmodul gemachte Einstellung unter MiNT fr die gesamte Shell und
    damit auch fr alle nachfolgend gestarteten Module gilt; aus der Sicht
    des Betriebssystems ist die Shell der einzige Proze. Deshalb werden in
    den Testmodulen jetzt zumindest alle verwendeten Signalhandler bei
    Modulende auf ihren Defaultwert zurckgesetzt (ein einmal installierter
    Handler htte fr das Betriebssystem bei einem nachfolgend gestarteten
    Modul immer noch Gltigkeit, obwohl er lngst nicht mehr existiert). Dies
    rumt vermutlich nicht alle Probleme aus, so da es bei diesen beiden
    Systemen sinnvoll ist, Testprogramme, die prozespezifische Einstellungen
    vornehmen, nur als gelinkte Programme zu starten. Siehe dazu auch die
    Erluterungen in COMPILER.TXT. Das Load-Time-Linking von MM2 scheint
    dagegen korrekt zu funktionieren.
    Das neue Modul 'tltl' demonstriert dieses Verhalten.
  o Bei den Prozeduren "sys.gethostname()", "sys.getpwnam()", "sys.getgrnam()"
    "POSIX2.system()" und "proc.initgroups()" konnte es in seltenen Fllen zu
    einem Absturz kommen, weil ein C-String nicht immer mit einem Nullbyte
    abgeschlossen war.
  o 'tim': Die Environmentvariable TZ wird nur noch analysiert, wenn sich
    ihr Wert gegenber dem letzten Mal gendert hat. Das sollte die Funktionen
    etwas beschleunigen.
  o "term.[u]sleep()": Wenn die Funktion vorzeitig durch ein Signal
    abgebrochen wurde, wurde nach Ablauf der restlichen Zeit irrtmlich ein
    SIGALRM gesendet.
  o 'Daemon1','Daemon2': Kleine Demonstrationsprogramme fr die (hoffentlich)
    korrekte Anwendung von Proze/Modulterminierung bei Hintergrundprozessen.
  o Die Untersttzung des FD_CLOEXEC-Flags unter TOS war falsch! Dieses
    Flag bedeutet, da die Dateikennung im neuen, mit "exec*()" erzeugten
    Proze geschlossen wird, im erzeugenden Proze bleibt sie jedoch
    erhalten. Da dieses Verhalten unter TOS nicht erzielbar ist, wurde die
    Untersttzung vollstndig entfernt.
  o 'tsystem': Kleines Testprogramm fr "system()".
  o 'LCfrench':  und  bercksichtigt.
  o "term.tcset/getattr()": An die Funktionen aus Kay Rmers Portlib pl11
    angepat.
  o In den Headerdateien PORTAB.M2H und OSCALLS.M2H wird von dem
    undokumentierten Feature des GNU-CPP fr optionale Restargumente Gebrauch
    gemacht, damit innerhalb von Parametern auch Kommata auftreten knnen
    (siehe M2LIB.TXT).
  o "proc.vfork()": Dokumentiert, da Aufrufe dieser Funktion nicht
    geschachtelt werden drfen.
